package top.aigoo.project01.utils;

import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;


/**
 * @Description: 请填写该类完成的功能
 * @Author: Mr.OYSHUO.欧阳大叔  mail:1642302522@qq.com
 * @Version 1.0.0
 * @Date: 2021/9/11 16:42
 */
public class EncryptPropertyPlaceholderConfigurer
        extends PropertyPlaceholderConfigurer {
    //需要加密的字段数组
    private String[] encryptPropNames = {"jdbc.username", "jdbc.password"};

    /**
     * 重写convertProperty,对关键的属性进行转换
     * @param propertyName 键
     * @param propertyValue  值
     * @return 解密后的值
     */
    @Override
    protected String convertProperty(String propertyName, String propertyValue) {
        if (isEncryptProp(propertyName)) {
            //对已经加密的字段进行解密工作
            String decryptValue = DESUtil.getDecryptString(propertyValue);
            return decryptValue;
        } else {
            return propertyValue;
        }
    }

    @Override
    protected String convertPropertyValue(String originalValue) {
        return super.convertPropertyValue(originalValue);
    }

    /**
     * 该属性是否已经加密
     *
     * @param propertyName
     * @return 是加密字段返回true，不是返回false
     */
    private boolean isEncryptProp(String propertyName) {
        //若等于需要加密的field，则进行加密
        for (String encryptPropertyName : encryptPropNames) {
            if (encryptPropertyName.equalsIgnoreCase(propertyName)) {
                return true;
            }
        }
        return false;
    }
}
